/**
 * 数据模型配置文件
 * 用于定义不同数据类型的设置项和选项
 */

/**
 * 通用设置项
 * 这些设置项会显示在所有类型的设置面板顶部
 */
export const commonSettings = [
  {
    field: 'required', // 字段名
    component: 'el-switch', // 使用的组件
    props: { 'active-text': '必需' }, // 组件属性
  },
  {
    field: 'apipiost_allow_null',
    component: 'el-switch',
    props: { 'active-text': '是否为空' }
  },
  {
    field: 'fieldDesc',
    component: 'el-input',
    props: { 
      type: 'textarea',
      rows: 3,
      placeholder: '字段描述'
    },
    label: '描述'
  },
]

/**
 * Mock变量选项
 * 用于生成模拟数据的函数选项
 */
const mockOptions = [
  { 
    label: '@telephone()', // 显示文本
    value: '@telephone()', // 实际值
    desc: '返回一个随机的11位手机号码' // 描述信息
  },
  { 
    label: '@natural(1,100)',
    value: '@natural(1,100)',
    desc: '返回一个随机的1-100的自然数（大于等于0的整数）'
  },
  { 
    label: '@integer(1,100)',
    value: '@integer(1,100)',
    desc: '返回随机的1-100的整数'
  },
  { 
    label: '@float(1, 10, 2, 5)',
    value: '@float(1, 10, 2, 5)',
    desc: '返回一个随机的浮点数，整数1-10，小数部分位数的最小值2，最大值5'
  }
]

/**
 * 布尔值选项
 * 用于boolean类型的默认值选择
 */
const booleanOptions = [
  { label: 'true', value: true },
  { label: 'false', value: false }
]

/**
 * 格式选项
 * 用于string类型的格式规范
 */
const formatOptions = [
  { label: 'date', value: 'date' }, // 日期
  { label: 'date-time', value: 'date-time' }, // 日期时间
  { label: 'email', value: 'email' }, // 电子邮件
  { label: 'hostname', value: 'hostname' }, // 主机名
  { label: 'ipv4', value: 'ipv4' }, // IPv4地址
  { label: 'ipv6', value: 'ipv6' }, // IPv6地址
  { label: 'uri', value: 'uri' } // URI地址
]

/**
 * 类型设置配置
 * 为每种数据类型定义其特有的设置项
 */
export const typeSettings = {
  /**
   * 字符串类型
   * 包含：示例值、Mock变量、默认值、格式、长度限制、正则表达式等
   */
  string: [
    {
      field: 'example',
      component: 'el-input',
      props: { placeholder: 'Example' },
      label: 'Example'
    },
    {
      field: 'mock',
      component: 'el-select',
      props: { 
        placeholder: 'Mock变量',
        options: mockOptions,
        popperClass: 'mock-select-dropdown'
      },
      label: 'Mock变量'
    },
    {
      field: 'default',
      component: 'el-input',
      props: { placeholder: '默认值' },
      label: '默认值'
    },
    {
      field: 'format',
      component: 'el-select',
      props: { 
        placeholder: 'Format',
        options: formatOptions
      },
      label: 'Format'
    },
    {
      field: 'minLength',
      component: 'el-input-number',
      props: { min: 0 },
      label: '最小长度'
    },
    {
      field: 'maxLength',
      component: 'el-input-number',
      props: { min: 0 },
      label: '最大长度'
    },
    {
      field: 'pattern.enabled',
      component: 'el-switch',
      props: { 'active-text': '启用正则' }
    },
    {
      field: 'pattern.value',
      component: 'el-input',
      props: { placeholder: '正则表达式' },
      label: 'Pattern',
      show: (node) => node.pattern?.enabled
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 数值类型
   * 包含：示例值、Mock变量、默认值、最大最小值限制等
   */
  number: [
    {
      field: 'example',
      component: 'el-input',
      props: { placeholder: 'Example' },
      label: 'Example'
    },
    {
      field: 'mock',
      component: 'el-select',
      props: { 
        placeholder: 'Mock变量',
        options: mockOptions,
        popperClass: 'mock-select-dropdown'
      },
      label: 'Mock变量'
    },
    {
      field: 'default',
      component: 'el-input-number',
      label: '默认值'
    },
    {
      field: 'minimum',
      component: 'el-input-number',
      label: '最小值',
      groupWith: 'exclusiveMinimum'
    },
    {
      field: 'exclusiveMinimum',
      component: 'el-switch',
      props: { 'active-text': '可等于最小值' },
      isGrouped: true
    },
    {
      field: 'maximum',
      component: 'el-input-number',
      label: '最大值',
      groupWith: 'exclusiveMaximum'
    },
    {
      field: 'exclusiveMaximum',
      component: 'el-switch',
      props: { 'active-text': '可等于最大值' },
      isGrouped: true
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 整数类型
   * 与number类似，但输入限制为整数
   */
  integer: [
    {
      field: 'example',
      component: 'el-input',
      props: { placeholder: 'Example' },
      label: 'Example'
    },
    {
      field: 'mock',
      component: 'el-select',
      props: { 
        placeholder: 'Mock变量',
        options: mockOptions,
        popperClass: 'mock-select-dropdown'
      },
      label: 'Mock变量'
    },
    {
      field: 'default',
      component: 'el-input-number',
      props: { precision: 0 },
      label: '默认值'
    },
    {
      field: 'minimum',
      component: 'el-input-number',
      props: { precision: 0 },
      label: '最小值',
      groupWith: 'exclusiveMinimum'
    },
    {
      field: 'exclusiveMinimum',
      component: 'el-switch',
      props: { 'active-text': '可等于最小值' },
      isGrouped: true
    },
    {
      field: 'maximum',
      component: 'el-input-number',
      props: { precision: 0 },
      label: '最大值',
      groupWith: 'exclusiveMaximum'
    },
    {
      field: 'exclusiveMaximum',
      component: 'el-switch',
      props: { 'active-text': '可等于最大值' },
      isGrouped: true
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 布尔类型
   * 包含：示例值、Mock变量、默认值（true/false）
   */
  boolean: [
    {
      field: 'example',
      component: 'el-input',
      props: { placeholder: 'Example' },
      label: 'Example'
    },
    {
      field: 'mock',
      component: 'el-select',
      props: { 
        placeholder: 'Mock变量',
        options: mockOptions,
        popperClass: 'mock-select-dropdown'
      },
      label: 'Mock变量'
    },
    {
      field: 'default',
      component: 'el-select',
      props: { 
        placeholder: '默认值',
        options: booleanOptions
      },
      label: '默认值'
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 数组类型
   * 包含：元素唯一性、元素数量限制等
   */
  array: [
    {
      field: 'uniqueItems',
      component: 'el-switch',
      props: { 'active-text': '元素唯一' }
    },
    {
      field: 'minItems',
      component: 'el-input-number',
      props: { min: 0 },
      label: '最小元素个数'
    },
    {
      field: 'maxItems',
      component: 'el-input-number',
      props: { min: 0 },
      label: '最大元素个数'
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 对象类型
   * 仅包含基本设置和描述
   */
  object: [
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * 空值类型
   * 包含：示例值、Mock变量等
   */
  null: [
    {
      field: 'example',
      component: 'el-input',
      props: { placeholder: 'Example' },
      label: 'Example'
    },
    {
      field: 'mock',
      component: 'el-select',
      props: { 
        placeholder: 'Mock变量',
        options: mockOptions,
        popperClass: 'mock-select-dropdown'
      },
      label: 'Mock变量'
    },
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * OneOf类型（其中之一）
   * 用于表示数据可以是多个类型中的一个
   */
  oneof: [
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * AnyOf类型（任意一个）
   * 用于表示数据可以满足多个模式中的任意一个
   */
  anyof: [
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ],

  /**
   * AllOf类型（所有）
   * 用于表示数据必须满足所有指定的模式
   */
  allof: [
    {
      field: 'description',
      component: 'el-input',
      props: { 
        type: 'textarea',
        rows: 3,
        placeholder: '备注'
      },
      label: '备注'
    }
  ]
}

/**
 * 设置项结构说明：
 * field: 字段名，对应数据模型中的属性
 * component: 使用的Element Plus组件
 * props: 组件的属性配置
 * label: 显示的标签文本
 * show: (可选) 控制设置项显示的条件函数
 */ 